{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import tbcontrol\n", "tbcontrol.expectversion('0.1.3')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numeric simulation\n", "------------------\n", "\n", "Let's start with a very simple numeric simulation of a proportional controller acting on a first order process $G = \\frac{y}{u} = \\frac{K}{\\tau s + 1}$. \n", "\n", "\\begin{align}\n", "y(s)(\\tau s + 1) &= K u(s) \\\\\n", "\\tau s y(s) + y(s) &= K u(s) \\\\\n", "s y(s) &= \\frac{1}{\\tau}\\left(K u(s) - y(s)\\right)\\\\\n", "\\frac{dy}{dt} &= \\frac{1}{\\tau}\\left(Ku - y\\right)\n", "\\end{align}" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "K = 3\n", "tau = 2" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "Kc = 2" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "ts = numpy.linspace(0, 5, 1000)\n", "dt = ts[1]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "y_continuous = []\n", "u_continuous = []\n", "y = 0\n", "sp = 1\n", "for t in ts:\n", " e = sp - y\n", " u = Kc*e\n", " dydt = 1/tau*(K*u - y)\n", " \n", " y += dydt*dt\n", " \n", " u_continuous.append(u)\n", " y_continuous.append(y)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def plot_continuous():\n", " fig, [ax_u, ax_y] = plt.subplots(2, 1, sharex=True)\n", " ax_u.plot(ts, u_continuous)\n", " ax_u.set_ylabel('$u(t)$')\n", " ax_y.plot(ts, y_continuous)\n", " ax_y.axhline(1)\n", " ax_y.set_ylabel('$y(t)$')\n", " ax_y.set_ylabel('time')\n", " \n", " return ax_u, ax_y" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(,\n", " )" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_continuous()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's use a discrete version of the same controller. We will assume a Zero Order Hold between the controller and the system." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The discrete controller will only run at the sampling points. Now, we have an integration timestep and a discrete timestep. We call the integration timestep `dt` and the sampling time $\\Delta t$. We may think that if we use the above `for` loop to update `t`, it will eventually be equal to $\\Delta t$, but this is not true in general. Instead, we set a target for the sampling time and check if we are at a time greater than that time, then set a new time one sampling time in the future." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "DeltaT = 0.5 # sampling time" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "u_discrete = []\n", "y_discrete = []\n", "y = 0\n", "sp = 1\n", "next_sample = 0\n", "for t in ts:\n", " if t >= next_sample:\n", " e = sp - y\n", " u = Kc*e\n", " next_sample += DeltaT\n", " dydt = 1/tau*(K*u - y)\n", " y += dydt*dt\n", " \n", " u_discrete.append(u)\n", " y_discrete.append(y)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ax_u, ax_y = plot_continuous()\n", "ax_u.plot(ts, u_discrete)\n", "ax_y.plot(ts, y_discrete)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice the difference? Because the discrete controller only calculates its values at the sampling points and because the ZOH keeps its output constant, the discrete controller takes more action later on, in fact introducing some oscillation where the continuous controller could use arbitrarily large gain." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Symbolic calculation\n", "--------------------\n", "\n", "Now we will try to replicate that last figure without doing numeric simulation. The continuous controller is trivially done via the Laplace transform:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "import sympy\n", "sympy.init_printing()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "s = sympy.Symbol('s')\n", "t = sympy.Symbol('t', positive=True)\n", "\n", "Gc = Kc # controller\n", "G = K/(tau*s + 1) # system\n", "\n", "G_cl = Gc*G/(1 + Gc*G)\n", "\n", "rs = 1/s # step input r(s)\n", "\n", "ys = rs*G_cl # system output y(s)\n", "es = rs - ys # error\n", "us = Gc*es # controller output\n", "\n", "yt = sympy.inverse_laplace_transform(ys, s, t)\n", "ut = sympy.inverse_laplace_transform(us, s, t)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.plot(ut, (t, 0, 5))\n", "sympy.plot(yt, (t, 0, 5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now for the discrete controller. First we need some new symbols." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "z, q = sympy.symbols('z, q')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We get the z transform of a sampled step from the table in the datasheet." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "rz = 1/(1 - z**-1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we rewrite a z-transformed signal as a polynomial $r(z) = a_0 + a_1 z^{-1} + a_2 z^{-2} \\dots$ , the coefficients give the values at the sampling points, so $a_0 = r(0)$, $a_1 = r(\\Delta t)$, $a_2 = r(2\\Delta t)$ and so on. We can obtain these coefficients easily using a Taylor expansion in sympy." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$1 + q + q^{2} + q^{3} + q^{4} + q^{5} + O\\left(q^{6}\\right)$$" ], "text/plain": [ " 2 3 4 5 ⎛ 6⎞\n", "1 + q + q + q + q + q + O⎝q ⎠" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rz.subs(z, q**-1).series()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see clearly that all the coefficients are 1 for the step.\n", "\n", "There is more detail in [this notebook](../../1_Dynamics/9_Sampled_systems/The%20z%20transform.ipynb) if you want to refresh your memory\n", "\n", "The `tbcontrol.symbolic.sampledvalues` function automates this process:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "from tbcontrol.symbolic import sampledvalues" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def plotdiscrete(fz, N):\n", " values = sampledvalues(fz, z, N)\n", " times = [n*DeltaT for n in range(N)]\n", " plt.stem(times, values)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plotdiscrete(rz, 10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's move on to the other transfer functions. The controller is simple:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "Gcz = Kc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The controller is connected to a hold element ($H$) which is connected to the system itself ($G$). The z-transform of this combination can be written $\\mathcal{Z}\\{H(s)G(s)\\}$. Remember, $H(s) = \\frac{1}{s}(1 - e^{-\\Delta t s})$. Now we can show\n", "\n", "\\begin{align}\n", "\\mathcal{Z}\\left\\{{H(s)G(s)}\\right\\} &= \n", " \\mathcal{Z}\\left\\{\\frac{1}{s}(1 - e^{-Ts})G(s)\\right\\} \\\\\n", " &= \\mathcal{Z}\\left\\{\\underbrace{\\frac{G(s)}{s}}_{F(s)}(1 - e^{-Ts})\\right\\} \\\\\n", " &= \\mathcal{Z}\\left\\{F(s) - F(s)e^{-Ts}\\right\\} \\\\\n", " &= \\mathcal{Z}\\left\\{F(s)\\right\\} - \\mathcal{Z}\\left\\{F(s)e^{-Ts}\\right\\} \\\\\n", " &= F(z) - F(z)z^{-1} \\\\\n", " &= F(z)(1 - z^{-1})\n", "\\end{align}\n", "So the z transform we're looking for will be $F(z)(1 - z^{-1})$ with $F(z)$ being the transform on the right of the table of $\\frac{1}{s}G(s)$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For $G(s) = \\frac{K}{\\tau s + 1}$, $F(s) = \\frac{K}{s(\\tau s + 1)}$, \n", "$F(z) = \\frac{K(1 - b)z^{-1}} {(1 - z^{-1})(1 - bz^{-1})}$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](../../assets/z_transform_integrated_first_order.png)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "a = 1/tau\n", "b = sympy.exp(-a*DeltaT)\n", "Fz = K*(1 - b)*z**-1/((1 - z**-1)*(1 - b*z**-1))\n", "HGz = Fz - z**-1*Fz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's verify that this is correct by plotting the continuous response along with the discrete values:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plotdiscrete(rz*HGz, 10)\n", "plt.plot(ts, K*(1 - numpy.exp(-ts/tau)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have the discrete transfer functions, we can repeat the same calculation as before." ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "yz = rz*Gcz*HGz/(1 + Gcz*HGz)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(ts, y_discrete)\n", "plotdiscrete(yz, 10)\n", "plt.legend(['Numeric simulation', 'Analytical at sampling points'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So now we have recovered the response we calculated numerically before analytically. Let's see if we can reproduce the numeric values between the sampling points for the continuous system output. Our first step is to construct the Laplace transform of the controller output. Let's look again what that looked like:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "ez = rz - yz\n", "uz = Gcz*ez\n", "plotdiscrete(uz, 10)\n", "plt.plot(ts, u_discrete)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can interpret this as shifted pulse signals added together.\n", "\n", "If we were trying to calculate the response of the system to a single pulse input, it would be simple.\n", "\n", "Since\n", "\\begin{align}\n", "y(s) &= G(s)u(s) \\\\\n", "y(t) &= \\mathcal{L}^{-1}\\{G(s)u(s)\\}\n", "\\end{align}\n", "\n", "and a pulse signal of width $\\Delta t$ and height $v$ has Laplace transform $\\frac{v}{s}\\left(1 - e^{-\\Delta t s}\\right) = vH(s)$, the single output would be easy to obtain:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "Hs = 1/s*(1 - sympy.exp(-DeltaT*s))" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "u_single_pulse = 2*Hs\n", "y_single_pulse = sympy.inverse_laplace_transform(G*u_single_pulse, s, t)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.plot(y_single_pulse, (t, 0, 5))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For subsequent pulses, we simply shift the pulse one time step up. So, given\n", "\n", "$$u(z) = a_0 + a_1 z^{-1} + a_2 z^{-2} + \\cdots = \\sum_{i=0}^{\\infty} a_i z^{-i}$$\n", "\n", "If the output of the controller is zero-order held so that the held version of the signal is $u_h$, we can write \n", "\n", "$$ u_h(s) = a_0H(s) + a_1 H(s) e^{-\\Delta t s} + a_2 H(s) e^{-2 \\Delta t s} = \\sum_{i=0}^{\\infty} a_i H(s) e^{-i\\Delta t s} $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This maps quite elegantly to the following generator expression:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "uhs = sum(ai*Hs*sympy.exp(-i*DeltaT*s) \n", " for i, ai in enumerate(sampledvalues(uz, z, 10)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Equivalently, we can write" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "uhs = 0\n", "a = sampledvalues(uz, z, 10)\n", "for i in range(10):\n", " uhs += a[i]*Hs*sympy.exp(-i*DeltaT*s)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can construct the continuous response like this:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "ys = uhs*G" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "yt = sympy.inverse_laplace_transform(ys, s, t)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(ts, y_discrete)\n", "plt.plot(ts, tbcontrol.symbolic.evaluate_at_times(yt, t, ts), '--')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that the analytical solution and numeric solution agree, but make sure you understand what the difference is in approach." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }